package com.gitee.swsk33.websocketdemo.api.websocket;


import com.alibaba.fastjson2.JSON;
import com.gitee.swsk33.websocketdemo.dataobject.User;
import com.gitee.swsk33.websocketdemo.encoder.UserWebSocketEncoder;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 接受和返回Java对象的Websocket，以User类为例
 */
@Slf4j
@Component
@ServerEndpoint(value = "/ws/object", encoders = {UserWebSocketEncoder.class})
public class ObjectWebSocketAPI {

	/**
	 * 连接建立成功调用的方法
	 */
	@OnOpen
	public void onOpen(Session session) {
		log.info("有新连接加入！ID是：{}", session.getId());
	}

	/**
	 * 连接关闭调用的方法
	 */
	@OnClose
	public void onClose(Session session) {
		log.info("有一连接关闭！");
	}

	/**
	 * 收到客户端消息后调用的方法
	 */
	@OnMessage
	public void onMessage(String message, Session session) throws Exception {
		// 接收到的仍然是字符串，只不过是JSON形式，可以进行解析
		User getUser = JSON.parseObject(message, User.class);
		log.info("接收到用户对象，id：{} 名字：{}", getUser.getId(), getUser.getName());
		// 再把接收到的用户对象发回去试试
		session.getBasicRemote().sendObject(getUser);
	}

	/**
	 * 发生错误时调用
	 */
	@OnError
	public void onError(Session session, Throwable error) {
		log.error("发生错误！ID是：{}", session.getId());
		log.error(error.getMessage());
	}

}